/*
 * variable.c
 *
 *  Created on: 2019年5月7日
 *      Author: Administrator
 */

#include <stdio.h>
#include "../include/variable.h"
#include "../include/condition.h"
/**
 * 变量的声明有两种情况：
 * 1.需要建立存储空间。int a在声明的时候就已经建立了存储空间
 * 2.不需要建立存储空间的，使用extern关键字的变量，只是声明，不定义
 *
 * 变量的作用域：
 * 1.局部变量
 * 在函数或块内部的局部变量，当局部变量被定义时，系统不会对其初始化
 * 2.全局变量
 * 在所有函数外部的全局变量，当定义全局变量时，系统会自动对其初始化
 * 虽然全局变量声明时已经被自动初始化，但正确的初始化变量时良好的编程习惯
 * 3.形式参数
 */

int volumn = 0;

void variable() {

//	extern int a;
//	int b = 0;
	// 局部变量
	int width = 15;
	int length = 20;
	int height = 5;
	// 计算体积
	volumn = width * length * height;
	printf("体积为：%d \n", volumn);
}

/**
 * 常量：值固定不变的变量
 * C语言中有两种定义常量的方式：
 * 1.#define 预处理器
 * 2.const关键字
 */
void const_variable() {

	const float LENGTH = 10.1;
	const float WIDTH = 20.2;

	float area = 0;

	area = LENGTH * WIDTH;
	printf("value of area: %f \n", area);
}

/**
 * 存储类定义C程序中变量/函数的范围（可见性）和生命周期。
 * 这些说明符放置在它们所修饰的类型之前。
 * auto：局部变量的默认存储类。
 * register：用于定义存储在寄存器中，而不是RAM中的局部变量
 * static：指示编译器在程序的生命周期内保持局部变量的存在
 * extern：用于提供一个全局变量的引用，全局变量对所有程序文件都是可见的。
 *
 */
void storage_classes() {

	// 等价 int year
//	auto int year;
	// register意味着变量可能存在寄存器中，但不一定存储在寄存器中，这取决于硬件和实现的限制
//	register int counter;
	//
	static int days = 0;
	days++;
	printf("days: %d \n", days);
}


